import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Scanner;



public class text {


    /**
     * 30.给定一个字符串 s 和一个字符串数组 words。 words 中所有字符串 长度相同。
     * @param s
     * @param words
     * @return
     */
    public List<Integer> findSubstring1(String s, String[] words) {
        List<Integer> list = new ArrayList<>();
        HashMap<String,Integer> map1 = new HashMap<>();
        for(String str : words){
            map1.put(str,map1.getOrDefault(str,0) + 1);
        }
        int len = words[0].length();
        for (int i = 0; i < words.length; i++) {
            HashMap<String,Integer> map2 = new HashMap<>();
            for (int right = i,left = i, count = 0; right + len <= words.length ; right+=len) {
                String in = s.substring(right,right + len);
                map2.put(in, map2.getOrDefault(in,0) + 1);
                if(map2.get(in) <= map1.getOrDefault(in,0))
                    count++;

                if((right - left + 1) < len + words.length){
                    String out = s.substring(left,left + len);
                    if(map2.get(out) <= map1.getOrDefault(out,0))
                        count--;
                    map2.put(out,map2.get(out) - 1);
                    left += len;
                }

                if(count == words.length){
                    list.add(left);
                }
            }
        }
        return list;
    }

    public List<Integer> findSubstring(String s, String[] words) {
        List<Integer> list = new ArrayList<>();
        int w = words[0].length();
        HashMap<String,Integer> map1 = new HashMap<>();
        for (int i = 0; i < words.length; i++) {
            map1.put(words[i],map1.getOrDefault(words[i],0) + 1);
        }

        for (int i = 0; i < w; i++) {
            HashMap<String,Integer> map2 = new HashMap<>();
            for (int right = i,left = i,count = 0; right + w <= s.length(); right += w) {
                //入窗口 维护count
                String in = s.substring(right,right + w);
                map2.put(in,map2.getOrDefault(in,0) + 1);
                if(map2.get(in) <= map1.getOrDefault(in,0)){
                    count++;
                }
                // 判断 维护count 出窗口
                if(right - left + 1 > words.length * w){
                    String out = s.substring(left,left + w);
                    if(map2.get(out) <= map1.getOrDefault(out,0)){
                        count--;
                    }
                    map2.put(out,map2.get(out) - 1);
                    left += w;
                }
                // 更新结果
                if(count == words.length){
                    list.add(left);
                }
            }
        }
        return list;
    }

    /**
     * 438.找到字符串中所有字母异位次
     * 异位次：字母异位词是通过重新排列不同单词或短语的字母而形成的单词或短语，并使用所有原字母一次
     * @param num1
     * @param num2
     * @return
     */
    public boolean ifSame(int[] num1,int[] num2){
        for (int i = 0; i < num2.length; i++) {
            if(num1[i] != num2[i]){
                return false;
            }
        }
        return true;
    }

    public List<Integer> findAnagrams(String s, String p) {
        List<Integer> list = new ArrayList<>();
        int[] hash1 = new int[26];
        int[] hash2 = new int[26];
        for (int i = 0; i < p.length(); i++) {
            hash2[p.charAt(i) - 'a']++;
        }
        int left = 0;
        int right = 0;
        while (right < s.length()){
            hash1[s.charAt(right) - 'a']++;
            if((right - left + 1) == p.length()){
                if(ifSame(hash1,hash2)){
                    list.add(left);
                }
                hash1[s.charAt(left++) - 'a']--;
            }
            right++;
        }
        return list;
    }

    /**
     * 法二 借用一个count来统计是否有合适 当count等于目标子串的长度的时候就说明这个就是一个异位次
     * 当hash1里面的这个字符比hash2中的字符少的情况下就让count++； 反之 count--；
     * @param s
     * @param p
     * @return
     */
    public List<Integer> findAnagrams1(String s, String p) {
        List<Integer> list = new ArrayList<>();
        int[] hash1 = new int[26];
        int[] hash2 = new int[26];
        for (int i = 0; i < p.length(); i++) {
            hash2[p.charAt(i) - 'a']++;
        }
        int left = 0;
        int right = 0;
        int count = 0;

        while (right < s.length()){
            if ( ++hash1[s.charAt(right) - 'a'] <=
                    hash2[s.charAt(right) - 'a']){
                count++;
            }

            if((right - left + 1) > p.length()){
                char out = s.charAt(left++);
                if(hash1[out - 'a']-- <= hash2[out - 'a']){
                    count--;
                }
            }

            if(count == p.length()){
                list.add(left);
            }
            right++;
        }

        return list;
    }

        public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        int b = sc.nextInt();
        int c = sc.nextInt();

        if((a+b)>c&&(a+c)>b&&(c+b)>a){
            double p = (a+b+c) / 2;
            double sum = Math.sqrt(p*(p-a)*(p-b)*(p-c));
            System.out.println(sum);
        }
    }
}
